/*
 * 基本数据类型变量间运算规则
 * 1.基本数据类型除了Boolean外，其余7种类型之间都可以进行运算，且运算结果为参与运算的类型
 * 2.运算规则包括
 *    自动类型提升
 *    强制类型转换
 * 
 * calcRules用来测试自动类型提升
 * 规则： 当容量小的变量与容量大的变量做运算时，结果自动转换为容量大的数据类型
 *  byte(1byte) < short(2byte) < char(2byte) < int(4byte) < float(4byte) < long(8byte) < double(8byte)

 *  特别注意：当byte、short、char类型变量做运算时，结果为int类型
 */

class CalcRules {
  public static void main(String[] args) {
    int i1 = 10;
    int i2 = i1;
    long l1 = i1;
    float f1 = l1;

    byte b1 = 12;
    // 特殊的情况
    byte b2 = 12;
    short s1 = 10;
    // short s2 = s1 + b2; // 编译不通过
    int i3 = b2 + s1;

    int test1 = b1 + i1;

    // **********************************************************
    // 练习1：
    long l11 = 123L;
    long l22 = 1234; // 理解为 自动类型提升 int类型

    // long l33 = 123123123123; // 123123123123理解为int类型 值超出了int类型 报错
    long l44 = 123123123123L; // 123123123123L理解为long类型加 'l' 或 'L' 8字节 可以存储

    // 练习2：
    float f2 = 12.3f;
    // float f3 = 12.3; // 不满足 自动类型提升的规则(double --> float) 报错; 加f 或 F 才是float类型

    // 练习3：
    // 规定1 整型常量 规定为int类型;
    byte b5 = 10;
    // byte b6 = b5 + 1; // 1 是整型常量 报错 1 是int类型 不能自动类型提升为byte类型
    int i6 = b5 + 1; // 1 是整型常量 可以自动类型提升为int类型
    // 规定2 浮点型常量 规定为double类型;
    double dd1 = b5 + 1.1; // 1.1 是浮点型常量 可以自动类型提升为double类型
    
    // 练习4：
    // 变量名 不能 以数字开头 为了“自洽”
    int 123L = 123;
    long l66 = 123L; // 这个变量是 int 123L 还是 值为 123L 呢？

  }
}
